using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._SpatialAnalystTools._SolarRadiation
{
    /// <summary>
    /// <para>Area Solar Radiation</para>
    /// <para>Derives incoming solar radiation from a raster surface.</para>
    /// <para>从栅格表面获取入射太阳辐射。</para>
    /// </summary>    
    [DisplayName("Area Solar Radiation")]
    public class AreaSolarRadiation : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AreaSolarRadiation()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_surface_raster">
        /// <para>Input raster</para>
        /// <para>Input elevation surface raster.</para>
        /// <para>输入高程表面栅格。</para>
        /// </param>
        /// <param name="_out_global_radiation_raster">
        /// <para>Output global radiation raster</para>
        /// <para><xdoc>
        ///   <para>The output raster representing the global radiation or total amount of incoming solar insolation (direct + diffuse) calculated for each location of the input surface.</para>
        ///   <para>The output has units of watt hours per square meter (WH/m2).</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出栅格表示针对输入表面的每个位置计算的全球辐射或入射太阳日照总量（直接 + 漫射）。</para>
        ///   <para>输出单位为每平方米瓦时 （WH/m2）。</para>
        /// </xdoc></para>
        /// </param>
        public AreaSolarRadiation(object _in_surface_raster, object _out_global_radiation_raster)
        {
            this._in_surface_raster = _in_surface_raster;
            this._out_global_radiation_raster = _out_global_radiation_raster;
        }
        public override string ToolboxName => "Spatial Analyst Tools";

        public override string ToolName => "Area Solar Radiation";

        public override string CallName => "sa.AreaSolarRadiation";

        public override List<string> AcceptEnvironments => ["autoCommit", "cellSize", "cellSizeProjectionMethod", "configKeyword", "extent", "geographicTransformations", "mask", "outputCoordinateSystem", "scratchWorkspace", "snapRaster", "tileSize", "workspace"];

        public override object[] ParameterInfo => [_in_surface_raster, _out_global_radiation_raster, _latitude, _sky_size, _time_configuration, _day_interval, _hour_interval, _each_interval.GetGPValue(), _z_factor, _slope_aspect_input_type.GetGPValue(), _calculation_directions, _zenith_divisions, _azimuth_divisions, _diffuse_model_type.GetGPValue(), _diffuse_proportion, _transmittivity, _out_direct_radiation_raster, _out_diffuse_radiation_raster, _out_direct_duration_raster];

        /// <summary>
        /// <para>Input raster</para>
        /// <para>Input elevation surface raster.</para>
        /// <para>输入高程表面栅格。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_surface_raster { get; set; }


        /// <summary>
        /// <para>Output global radiation raster</para>
        /// <para><xdoc>
        ///   <para>The output raster representing the global radiation or total amount of incoming solar insolation (direct + diffuse) calculated for each location of the input surface.</para>
        ///   <para>The output has units of watt hours per square meter (WH/m2).</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出栅格表示针对输入表面的每个位置计算的全球辐射或入射太阳日照总量（直接 + 漫射）。</para>
        ///   <para>输出单位为每平方米瓦时 （WH/m2）。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output global radiation raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_global_radiation_raster { get; set; }


        /// <summary>
        /// <para>Latitude</para>
        /// <para><xdoc>
        ///   <para>The latitude for the site area. The units are decimal degrees, with positive values for the northern hemisphere and negative for the southern.</para>
        ///   <para>For input surface rasters containing a spatial reference, the mean latitude is automatically calculated; otherwise, latitude will default to 45 degrees.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>站点区域的纬度。单位为十进制度，北半球为正值，南半球为负值。</para>
        ///   <para>对于包含空间参考的输入表面栅格，将自动计算平均纬度;否则，纬度将默认为 45 度。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Latitude")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _latitude { get; set; } = null;


        /// <summary>
        /// <para>Sky size / Resolution</para>
        /// <para><xdoc>
        ///   <para>The resolution or sky size for the viewshed, sky map, and sun map rasters. The units are cells.</para>
        ///   <para>The default creates a raster of 200 by 200 cells.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>视域、天空地图和太阳地图栅格的分辨率或天空大小。这些单位是单元格。</para>
        ///   <para>默认创建 200 x 200 像元的栅格。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Sky size / Resolution")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _sky_size { get; set; } = 200;


        /// <summary>
        /// <para>Time configuration</para>
        /// <para><xdoc>
        ///   <para>Specifies the time period to use for the calculations.</para>
        ///   <bulletList>
        ///     <bullet_item>Special days—Calculates solar insolation for the solstice days (summer and winter) and the equinox days (where the insolation for both spring and fall equinox are the same).</bullet_item><para/>
        ///     <bullet_item>Within day—Performs calculations for a specified time period within one single day.
        ///     <para>Select the Julian Day and enter the start and end times. When the start time and the end time are the same, instantaneous insolation will be calculated. When the start time is before sunrise and the end time is after sunset, insolation will be calculated for the whole day.</para>
        ///     <bulletList>
        ///       <bullet_item>To facilitate entering the correct day, use the calendar button to open the Calendar dialog box.  </bullet_item></bulletList>
        ///     </bullet_item><para/>
        ///     <bullet_item>Multiple days—Performs calculations for a specific multiple-day period within a year.
        ///     <para>Specify the start year, start day, and end day. When the end day is smaller than the start day, the end day is considered to be in the following year. The default time configuration starts on day 5 and ends on day 160 of the current Julian year.</para>
        ///     <bulletList>
        ///       <bullet_item>To facilitate entering the correct days, use the calendar button to open the Calendar dialog box.  </bullet_item></bulletList>
        ///     </bullet_item><para/>
        ///     <bullet_item>Whole year—Performs calculations for an entire year using monthly intervals for calculations.
        ///     <para>If the Create outputs for each interval option is checked, output files will be created for each month; otherwise, a single output will be created for the whole year.</para>
        ///     </bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定用于计算的时间段。</para>
        ///   <bulletList>
        ///     <bullet_item>特殊日子 - 计算冬至日（夏季和冬季）和春分日（春分和秋分的日照相同）的日照。</bullet_item><para/>
        /// <bullet_item>在一天内 - 在一天内执行指定时间段的计算。
        ///     <para>选择儒略日并输入开始和结束时间。当开始时间和结束时间相同时，将计算瞬时日照。当开始时间在日出之前，结束时间在日落后时，将计算全天的日照。</para>
        ///     <bulletList>
        /// <bullet_item>为了便于输入正确的日期，请使用日历按钮打开“日历”对话框。 </bullet_item></bulletList>
        ///     </bullet_item><para/>
        /// <bullet_item>多天 - 对一年中的特定多日期间执行计算。
        ///     <para>指定开始年份、开始日期和结束日期。当结束日小于开始日时，结束日被视为下一年。默认时间配置从当前儒略年的第 5 天开始，到第 160 天结束。</para>
        ///     <bulletList>
        /// <bullet_item>为了便于输入正确的日期，请使用日历按钮打开“日历”对话框。 </bullet_item></bulletList>
        ///     </bullet_item><para/>
        /// <bullet_item>全年 - 使用每月间隔进行计算，对一整年进行计算。
        ///     <para>如果选中 Create outputs for each interval 选项，则将为每个月创建输出文件;否则，将创建全年的单个输出。</para>
        ///     </bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Time configuration")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _time_configuration { get; set; } = null;


        /// <summary>
        /// <para>Day interval</para>
        /// <para><xdoc>
        ///   <para>The time interval through the year (units: days) used for calculation of sky sectors for the sun map.</para>
        ///   <para>The default value is 14 (biweekly).</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>一年中用于计算太阳图天空扇区的时间间隔（单位：天）。</para>
        ///   <para>默认值为 14（每两周一次）。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Day interval")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _day_interval { get; set; } = 14;


        /// <summary>
        /// <para>Hour interval</para>
        /// <para><xdoc>
        ///   <para>Time interval through the day (units: hours) used for calculation of sky sectors for sun maps.</para>
        ///   <para>The default value is 0.5.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>一天中用于计算太阳图的天空扇区的时间间隔（单位：小时）。</para>
        ///   <para>默认值为 0.5。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Hour interval")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _hour_interval { get; set; } = 0.5;


        /// <summary>
        /// <para>Create outputs for each interval</para>
        /// <para><xdoc>
        ///   <para>Specifies whether to calculate a single total insolation value for all locations or multiple values for the specified hour and day interval.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—A single total radiation value will be calculated for the entire time configuration. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—Multiple radiation values will be calculated for each time interval over the entire time configuration. The number of outputs will depend on the hour or day interval. For example, for a whole year with monthly intervals, the result will contain 12 output radiation values for each location. The output raster will contain multiple bands that correspond to the radiation or duration values for each time interval.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是计算所有位置的单个总日照值，还是计算指定小时和日期间隔的多个值。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中—将计算整个时间配置的单个总辐射值。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 将在整个时间配置中为每个时间间隔计算多个辐射值。输出数量将取决于小时或天间隔。例如，对于以月为间隔的一整年，结果将包含每个位置的 12 个输出辐射值。输出栅格将包含多个波段，这些波段对应于每个时间间隔的辐射或持续时间值。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Create outputs for each interval")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _each_interval_value _each_interval { get; set; } = _each_interval_value._false;

        public enum _each_interval_value
        {
            /// <summary>
            /// <para>NOINTERVAL</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NOINTERVAL")]
            [GPEnumValue("false")]
            _false,

            /// <summary>
            /// <para>INTERVAL</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INTERVAL")]
            [GPEnumValue("true")]
            _true,

        }

        /// <summary>
        /// <para>Z factor</para>
        /// <para><xdoc>
        ///   <para>The number of ground x,y units in one surface z unit.</para>
        ///   <para>The z-factor adjusts the units of measure for the z units when they are different from the x,y units of the input surface. The z-values of the input surface are multiplied by the z-factor when calculating the final output surface.</para>
        ///   <para>If the x,y units and z units are in the same units of measure, the z-factor is 1. This is the default.</para>
        ///   <para>If the x,y units and z units are in different units of measure, the z-factor must be set to the appropriate factor, or the results will be incorrect.</para>
        ///   <para>For example, if your z units are feet and your x,y units are meters, you would use a z-factor of 0.3048 to convert your z units from feet to meters (1 foot = 0.3048 meter).</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>一个曲面 z 单位中的地面 x，y 单位数。</para>
        ///   <para>当 z 单位与输入曲面的 x，y 单位不同时，z 因子会调整它们的测量单位。在计算最终输出曲面时，输入曲面的 z 值乘以 z 因子。</para>
        ///   <para>如果 x，y 单位和 z 单位采用相同的测量单位，则 z 因子为 1。这是默认设置。</para>
        ///   <para>如果 x，y 单位和 z 单位采用不同的测量单位，则必须将 z 因子设置为适当的因子，否则结果将不正确。</para>
        ///   <para>例如，如果 z 单位是英尺，x，y 单位是米，则使用 z 因子 0.3048 将 z 单位从英尺转换为米（1 英尺 = 0.3048 米）。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Z factor")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _z_factor { get; set; } = 1;


        /// <summary>
        /// <para>Slope and aspect input type</para>
        /// <para><xdoc>
        ///   <para>How slope and aspect information are derived for analysis.</para>
        ///   <bulletList>
        ///     <bullet_item>From the input surface raster— The slope and aspect rasters are calculated from the input surface raster. This is the default.</bullet_item><para/>
        ///     <bullet_item>From a flat surface— Constant values of zero are used for slope and aspect.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>如何获取坡度和坡向信息以进行分析。</para>
        ///   <bulletList>
        ///     <bullet_item>从输入表面栅格 - 坡度栅格和坡向栅格是根据输入表面栅格计算得出的。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>从平面 - 常量值 0 用于坡度和坡向。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Slope and aspect input type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _slope_aspect_input_type_value _slope_aspect_input_type { get; set; } = _slope_aspect_input_type_value._FROM_DEM;

        public enum _slope_aspect_input_type_value
        {
            /// <summary>
            /// <para>From the input surface raster</para>
            /// <para>From the input surface raster— The slope and aspect rasters are calculated from the input surface raster. This is the default.</para>
            /// <para>从输入表面栅格 - 坡度栅格和坡向栅格是根据输入表面栅格计算得出的。这是默认设置。</para>
            /// </summary>
            [Description("From the input surface raster")]
            [GPEnumValue("FROM_DEM")]
            _FROM_DEM,

            /// <summary>
            /// <para>From a flat surface</para>
            /// <para>From a flat surface— Constant values of zero are used for slope and aspect.</para>
            /// <para>从平面 - 常量值 0 用于坡度和坡向。</para>
            /// </summary>
            [Description("From a flat surface")]
            [GPEnumValue("FLAT_SURFACE")]
            _FLAT_SURFACE,

        }

        /// <summary>
        /// <para>Calculation directions</para>
        /// <para><xdoc>
        ///   <para>The number of azimuth directions used when calculating the viewshed.</para>
        ///   <para>Valid values must be multiples of 8 (8, 16, 24, 32, and so on). The default value is 32 directions, which is adequate for complex topography.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>计算视域时使用的方位角方向数。</para>
        ///   <para>有效值必须是 8 的倍数（8、16、24、32 等）。默认值为 32 个方向，这对于复杂的地形来说已经足够了。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Calculation directions")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _calculation_directions { get; set; } = 32;


        /// <summary>
        /// <para>Zenith divisions</para>
        /// <para><xdoc>
        ///   <para>The number of divisions used to create sky sectors in the sky map.</para>
        ///   <para>The default is eight divisions (relative to zenith). Values must be greater than zero and less than half the sky size value.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>用于在天空图中创建天空扇区的分区数。</para>
        ///   <para>默认值为 8 个分区（相对于天顶）。值必须大于零且小于天空大小值的一半。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Zenith divisions")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _zenith_divisions { get; set; } = 8;


        /// <summary>
        /// <para>Azimuth divisions</para>
        /// <para><xdoc>
        ///   <para>The number of divisions used to create sky sectors in the sky map.</para>
        ///   <para>The default is eight divisions (relative to north). Valid values must be multiples of 8. Values must be greater than zero and less than 160.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>用于在天空图中创建天空扇区的分区数。</para>
        ///   <para>默认值为 8 个分区（相对于北方）。有效值必须是 8 的倍数。值必须大于零且小于 160。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Azimuth divisions")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _azimuth_divisions { get; set; } = 8;


        /// <summary>
        /// <para>Diffuse model type</para>
        /// <para><xdoc>
        ///   <para>Type of diffuse radiation model.</para>
        ///   <bulletList>
        ///     <bullet_item>Uniform overcast sky— Uniform diffuse model. The incoming diffuse radiation is the same from all sky directions. This is the default.</bullet_item><para/>
        ///     <bullet_item>Standard overcast sky— Standard overcast diffuse model. The incoming diffuse radiation flux varies with zenith angle.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>漫射辐射模型的类型。</para>
        ///   <bulletList>
        ///     <bullet_item>均匀的阴天 — 均匀的漫射模型。从所有天空方向入射的漫射辐射都是相同的。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>标准阴天 — 标准阴天漫射模型。入射漫射辐射通量随天顶角而变化。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Diffuse model type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _diffuse_model_type_value _diffuse_model_type { get; set; } = _diffuse_model_type_value._UNIFORM_SKY;

        public enum _diffuse_model_type_value
        {
            /// <summary>
            /// <para>Uniform overcast sky</para>
            /// <para>Uniform overcast sky— Uniform diffuse model. The incoming diffuse radiation is the same from all sky directions. This is the default.</para>
            /// <para>均匀的阴天 — 均匀的漫射模型。从所有天空方向入射的漫射辐射都是相同的。这是默认设置。</para>
            /// </summary>
            [Description("Uniform overcast sky")]
            [GPEnumValue("UNIFORM_SKY")]
            _UNIFORM_SKY,

            /// <summary>
            /// <para>Standard overcast sky</para>
            /// <para>Standard overcast sky— Standard overcast diffuse model. The incoming diffuse radiation flux varies with zenith angle.</para>
            /// <para>标准阴天 — 标准阴天漫射模型。入射漫射辐射通量随天顶角而变化。</para>
            /// </summary>
            [Description("Standard overcast sky")]
            [GPEnumValue("STANDARD_OVERCAST_SKY")]
            _STANDARD_OVERCAST_SKY,

        }

        /// <summary>
        /// <para>Diffuse proportion</para>
        /// <para><xdoc>
        ///   <para>The proportion of global normal radiation flux that is diffuse. Values range from 0 to 1.</para>
        ///   <para>This value should be set according to atmospheric conditions. The default value is 0.3 for generally clear sky conditions.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>漫射的全局法向辐射通量的比例。取值范围为 0 到 1。</para>
        ///   <para>该值应根据大气条件设置。对于一般晴朗的天空条件，默认值为 0.3。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Diffuse proportion")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _diffuse_proportion { get; set; } = 0.3;


        /// <summary>
        /// <para>Transmittivity</para>
        /// <para><xdoc>
        ///   <para>The fraction of radiation that passes through the atmosphere (averaged overall wavelengths). Values range from 0 (no transmission) to 1 (all transmission).</para>
        ///   <para>The default is 0.5 for a generally clear sky.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>穿过大气层的辐射比例（平均总波长）。值范围从 0（无传输）到 1（所有传输）。</para>
        ///   <para>对于一般晴朗的天空，默认值为 0.5。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Transmittivity")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _transmittivity { get; set; } = 0.5;


        /// <summary>
        /// <para>Output direct radiation raster</para>
        /// <para><xdoc>
        ///   <para>The output raster representing the direct incoming solar radiation for each location.</para>
        ///   <para>The output has units of watt hours per square meter (WH/m2).</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出栅格表示每个位置的直接入射太阳辐射。</para>
        ///   <para>输出单位为每平方米瓦时 （WH/m2）。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output direct radiation raster")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_direct_radiation_raster { get; set; } = null;


        /// <summary>
        /// <para>Output diffuse radiation raster</para>
        /// <para><xdoc>
        ///   <para>The output raster representing the diffuse incoming solar radiation for each location.</para>
        ///   <para>The output has units of watt hours per square meter (WH/m2).</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出栅格表示每个位置的漫射入射太阳辐射。</para>
        ///   <para>输出单位为每平方米瓦时 （WH/m2）。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output diffuse radiation raster")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_diffuse_radiation_raster { get; set; } = null;


        /// <summary>
        /// <para>Output direct duration raster</para>
        /// <para><xdoc>
        ///   <para>The output raster representing the duration of direct incoming solar radiation.</para>
        ///   <para>The output has units of hours.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>表示直接入射太阳辐射持续时间的输出栅格。</para>
        ///   <para>输出以小时为单位。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output direct duration raster")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_direct_duration_raster { get; set; } = null;


        public AreaSolarRadiation SetEnv(int? autoCommit = null, object cellSize = null, object configKeyword = null, object extent = null, object geographicTransformations = null, object mask = null, object outputCoordinateSystem = null, object scratchWorkspace = null, object snapRaster = null, double[] tileSize = null, object workspace = null)
        {
            base.SetEnv(autoCommit: autoCommit, cellSize: cellSize, configKeyword: configKeyword, extent: extent, geographicTransformations: geographicTransformations, mask: mask, outputCoordinateSystem: outputCoordinateSystem, scratchWorkspace: scratchWorkspace, snapRaster: snapRaster, tileSize: tileSize, workspace: workspace);
            return this;
        }

    }

}